#include "gcode_ex.h"

/**为了防止计算的时候产生误差，一律使用整型，即距离值要扩大十倍**/
uint8_t Liner_interpolationEx(int32_t coordi_x, int32_t coordi_y, uint16_t speed)
{
	interpolationMode = liner;
	
	if(coordi_x + MC_Execute_param.X_current > MC_Config_param.X_Max_range)
		return 1;
	if(coordi_y + MC_Execute_param.Y_current > MC_Config_param.Y_Max_range)
		return 2;
	
	Linear_Interpolation(coordi_x*MC_Config_param.mm_pulse, -coordi_y*MC_Config_param.mm_pulse,
						speed);
	
	return 0;
}


/**为了防止计算的时候产生误差，一律使用整型，即距离值要扩大十倍**/
uint8_t Circular_interpolationEx(int32_t start_x, int32_t start_y, int32_t stop_x, int32_t stop_y, uint16_t speed, uint8_t dir)
{
	interpolationMode = circular;
	uint8_t start_quadrant = 0;
	uint8_t stop_quadrant = 0;
	uint8_t interpol_index = 0;
	if(start_x + MC_Execute_param.X_current > MC_Config_param.X_Max_range)
		return 1;	
	if(start_y + MC_Execute_param.Y_current > MC_Config_param.Y_Max_range)
		return 2;	
	
	if(stop_x + MC_Execute_param.X_current > MC_Config_param.X_Max_range)
		return 3;	
	if(stop_y + MC_Execute_param.Y_current > MC_Config_param.Y_Max_range)
		return 4;
	Circular_InterPolation(start_x*MC_Config_param.mm_pulse, start_y*MC_Config_param.mm_pulse,
						stop_x*MC_Config_param.mm_pulse, -stop_y*MC_Config_param.mm_pulse, 
						speed, dir);
	return 0;
}


/**为了防止计算的时候产生误差，一律使用整型，即距离值要扩大十倍**/
uint8_t Z_axisEx(int32_t coordi_z, uint16_t speed)
{
	if(coordi_z + MC_Execute_param.Z_current < MC_Config_param.Z_Max_range)
		return 1;
	Z_axis_output(coordi_z*MC_Config_param.mm_pulse, speed);
	return 0;
}

